Julia - Osnovna sintaksa - funkcije i stringovi

In [1]:
#Funkcije predstavljaju jedan od osnovnih gradivnih blokova u svim programskim jezicima, pa tako i u programskom
#jeziku Julia. U opštem slučaju, funkcija se definiše prema sledećem obrascu:

#function name_of_function(arguments)
#   line1
#   line2
#   ...
#   lineN
#end

#gde ključna reč function označava početak definicije naše funkcije, name_of_function označava ime koje želimo
#da damo našoj funkciji, i kako ćemo je pozivati iz drugih programskih celina, arguements označava torku koju
#prosleđujemo našoj funkciji kao ulazne argumente, a line1,..,lineN predstavljaju naredbe koje čine obradu koja
#se dešava u našoj funkciji. Na primer, možemo definisati funkciju na sledeći način:

function ispis()
       println("Ovo je funkcija za ispis")
end
Out[1]:
ispis (generic function with 1 method)
In [6]:
#Sada možemo izvršiti poziv ove funkcije sa:

ispis()
Ovo je funkcija za ispis
In [7]:
#Ovo je bio primer funkcije koja radi samo jedan običan ispis stringa. Ukoliko želimo da naša funkcija vraća neku 
#povratnu vrednost, moramo to naznačiti sa naredbom return. To možemo postići kao u sledećem primeru:

function uk_cena(osn_cena)
    stopa_poreza = 0.15;
    return osn_cena * (1 + stopa_poreza);
end
Out[7]:
uk_cena (generic function with 1 method)
In [8]:
osn_cena_cokolade = 80;
osn_cena_caja = 150;

println("Vaš račun za čaj iznosi: ", uk_cena(osn_cena_caja));    #Kao što vidimo, povratna vrednost može se koristiti
println("Vaš račun iznosi: ", uk_cena(osn_cena_cokolade));    #za direktan ispis u prinln() funkciji
Vaš račun za čaj iznosi: 172.5
Vaš račun iznosi: 92.0
In [9]:
#U okviru programskog jezika Julia takođe postoji i mogućnost uvođenja opcionih argumenata:
#Ukoliko je funkcija definisana tako da radi sa N argumenata, a mi smo označili k-ti po redu da mora da bude opcioni
#Onda i svi oni koji slede posle njega tj. preostalih N - k takođe moraju biti opcioni. Na primer:

function najveci_broj(br1, br2, br3 = 0, br4 = 0)
   return max(max(max(br1,br2),br3),br4)             #funkcija koja za do 4 prosleđena broja vraća najveći među njima
end
                                                     #minimalno prosleđujemo 2
Out[9]:
najveci_broj (generic function with 3 methods)
In [12]:
najveci_broj(500,4,1000,1) #poziv funkcije sa 4 broja
Out[12]:
1000
In [13]:
najveci_broj(1000000,40)    #poyiv funkcije sa 2 broja, a preostala 2 se automatski postavljaju na nulu
Out[13]:
1000000
In [15]:
#Ukoliko želimo funkciju koja ima za cilj vraćanje više povratnih vrednosti, onda za njeno definisanje
#moramo da koristimo torku kao povratni tip naše funkcije, a na čijim koordinatama biti upravo rezultati obrade naše
#funkcije koje želimo da vratimo
 
#Primer:

function sredine(br1,br2)    #funkcija koja vraca aritmetičku i geometrijsku sredinu dva broja
             return (br1 + br2) / 2, sqrt(br1*br2)
end
Out[15]:
sredine (generic function with 1 method)
In [19]:
br1 = 40; br2 = 50;   #ovde vidimo da je moguće da u jednom redu imamo i vše naredbi, ukoliko
                      #su one odvojene operatorom ;
In [20]:
ar_sr, g_sr = sredine(br1, br2);
In [21]:
ar_sr
Out[21]:
45.0
In [22]:
g_sr
Out[22]:
44.721359549995796
In [24]:
#STRINGOVI

#Strigovi, kao i u većini drugih programskih jezika, predstavljaju sekvencu od po nekoliko karaktera
#koji se odnose na neku celinu ili pojam. Stringovi se u programskom jeziku Julia definišu tako što se željeni niz 
#karaktera koji će sačinjavati naš string okružimo sa obe strane sa ". Na primer:

string_primer1 = "Ovo je primer jednog stringa"
Out[24]:
"Ovo je primer jednog stringa"
In [26]:
#Ukoliko nam je za ciljnu obradu bitna dužina stringa sa kojim raspolažemo (na primer, za formiranje naziva neke 
#datoteke), to možemo kao i sa nizovima, postući primenom funkcije length() :

println("Dužina stringa string_primer1 iznosi: " , length(string_primer1));
Dužina stringa string_primer1 iznosi: 28
In [27]:
#Potpuno analogno kao kod nizova, možemo izvršiti izdvajanje određenog podskupa karaktera koji čine naš string:
string_primer1[1],
string_primer1[1:5],
string_primer1[5:end],
string_primer1[10:15]
Out[27]:
('O', "Ovo j", "je primer jednog stringa", "imer j")
In [28]:
#Za izvlačenje podstringa našeg stringa možemo koristiti i funkciju SubString(string, begin, end), gde
#je string stringovska promenljiva koju prosleđujemo, begin je redni broj indeksa od kojeg počinje
#naš podstring, a end je rdni broj indeksa kojim se završava naš string. 

#Primer korišćenja funkcije SubString():

SubString(string_primer1, 1, 5)
Out[28]:
"Ovo j"
In [29]:
#Kao što možemo primetiti, rezultat je istovetan kao onaj dobijen sa string_primer1[1:5]
In [30]:
#Jedna veoma važna operacijakoju možemo raditi sa stringovima je i konkatenacija tj. nadovezivanje naših stringova.
#Ona se veoma lako može realizovati: Neka su nam data dtva stringa str1 i str2. Tada pozivanjem konstruktora string()
#Na sledeći način: string(str1, "", str2) dobijamo string koji predstavlja konkatenaciju stringova str1 i str2:

str1 = "Dobar "; str2 = "dan";
string(str1, "", str2)
Out[30]:
"Dobar dan"
In [32]:
#Za kraj, navedimo jos jednu veoma korišćenu operaciju nad stringovima: Leksikografsko poređenje.
#Neka su nam dati stringovi str1 i str2. Tada koristeći operator < izraz str1 < str2 predstavlja ispitivanje da li
#se str1 leksikografski nalazi pre str2. Rezultat ove operacije biće logičkog tipa. Analogno se ispitivanje može
#vršiti i sa drugim operatorima poretka:

str1 < str2,
str1 <= str2,
str1 > str2,
str1 >= str2
Out[32]:
(true, true, false, false)
In [ ]: